package com.wicket.okrapp.integration.dto;

import com.wicket.okrapp.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;

import lombok.Data;

/**
 * @desc AchievementDto
 * @使用场景
 */
@Data
public class AchievementDto extends BaseDto implements Serializable {

  /**
   * 成果ID
   */
  @ApiModelProperty("成果ID")
  private String achievementId;

  /**
   * 成果类型ID
   */
  @ApiModelProperty("成果类型ID")
  private String achievementTypeId;

  /**
   * 成果类型编号
   */
  @ApiModelProperty("成果类型编号")
  private String achievementTypeNumber;

  /**
   * 成果类别ID
   */
  @ApiModelProperty("成果类别ID")
  private String achievementCategoryId;

  /**
   * 成果类别编号
   */
  @ApiModelProperty("成果类别编号")
  private String achievementCategoryNumber;

  /**
   * 成果等级ID
   */
  @ApiModelProperty("成果等级ID")
  private String achievementGradeId;

  /**
   * 成果等级编号
   */
  @ApiModelProperty("成果等级编号")
  private String achievementGradeNumber;

  /**
   * 版权归属对象类型编码
   */
  @ApiModelProperty("版权归属对象类型编码")
  private String copyrightObjectTypeCode;

  /**
   * 是否开启转化成果
   */
  @ApiModelProperty("是否开启转化成果")
  private String isUseConversion;

  /**
   * 是否标志性成果
   */
  @ApiModelProperty("是否标志性成果")
  private String isSymbolicAchievements;

  /**
   * 成果编号
   */
  @ApiModelProperty("成果编号")
  private String achievementNumber;

  /**
   * 成果名称
   */
  @ApiModelProperty("成果名称")
  private String achievementName;

  /**
   * 成果类型名称
   */
  @ApiModelProperty("成果类型名称")
  private String achievementTypeName;

  /**
   * 成果介绍
   */
  @ApiModelProperty("成果介绍")
  private String achievementDesc;

  /**
   * 成果补充介绍
   */
  @ApiModelProperty("成果补充介绍")
  private String achievementAddDesc;

  /**
   * 成果转化介绍
   */
  @ApiModelProperty("成果转化介绍")
  private String achievementConversiontDesc;

  /**
   * 授予单位
   */
  @ApiModelProperty("授予单位")
  private String awardedUnit;

  /**
   * 相关文号
   */
  @ApiModelProperty("相关文号")
  private String relatedDocument;

  /**
   * 授予时间
   */
  @ApiModelProperty("授予时间")
  private Date awardedTime;

  /**
   * 有效期结束时间
   */
  @ApiModelProperty("有效期结束时间")
  private Date validEndTime;

  /**
   * 主体生命周期 CURRENTLY_VALID:当前有效 EDITING:正在编辑 ARCHIVING:历史存档
   */
  @ApiModelProperty("主体生命周期")
  private String subjectLifeCycle;

  /**
   * 操作人就职记录ID
   */
  @ApiModelProperty("操作人就职记录ID")
  private String operationInductionId;

  /**
   * 创建时间
   */
  @ApiModelProperty("创建时间")
  private Date createTime;

  /**
   * 操作时间
   */
  @ApiModelProperty("操作时间")
  private Date operateTime;

  /**
   * 成果类别名称
   */
  @ApiModelProperty("成果类别名称")
  private String achievementCategoryName;

  /**
   * 成果等级名称
   */
  @ApiModelProperty("成果等级名称")
  private String achievementGradeName;

  /**
   * 版权归属别名
   */
  @ApiModelProperty("版权归属别名")
  private String belongName;

  /**
   * 版权归属对象名称
   */
  @ApiModelProperty("版权归属对象名称")
  private String copyrightObjectName;

  /**
   * 成果业务等级ID
   */
  @ApiModelProperty("成果业务等级ID")
  private String achievementBusinessGradeId;

  /**
   * 成果业务等级编号
   */
  @ApiModelProperty("成果业务等级编号")
  private String achievementBusinessGradeNumber;

  /**
   * 成果业务等级名称
   */
  @ApiModelProperty("成果业务等级名称")
  private String achievementBusinessGradeName;

  /**
   * 业绩责任部门ID
   */
  @ApiModelProperty("业绩责任部门ID")
  private String dutyDeptId;

  /**
   * 版权归属对象ID
   */
  @ApiModelProperty("版权归属对象ID")
  private String copyrightObjectId;

  /**
   * 部门简称
   */
  @ApiModelProperty("部门简称")
  private String deptShortName;

  /**
   * 成果库类型 RESERVE_WAREHOUSE:预备库 OFFICIAL_LIBRARY:正式库
   */
  @ApiModelProperty("成果库类型")
  private String achiveLibraryType;

  /**
   * 成果冗余状态 TO_BE_RELEASED:待发布 AUDIT:待审核 TO_BE_CERTIFIED:待认证 CERT_SUCCESS:认证成功 CERT_FAIL:认证失败 ARCHIVING:历史存档
   */
  @ApiModelProperty("成果冗余状态")
  private String achivementStateCode;

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    if (!super.equals(o)) return false;
    AchievementDto that = (AchievementDto) o;
    return (
      achievementId == that.achievementId &&
      achievementTypeId == that.achievementTypeId &&
      achievementTypeNumber == that.achievementTypeNumber &&
      achievementCategoryId == that.achievementCategoryId &&
      achievementCategoryNumber == that.achievementCategoryNumber &&
      achievementGradeId == that.achievementGradeId &&
      achievementGradeNumber == that.achievementGradeNumber &&
      copyrightObjectTypeCode == that.copyrightObjectTypeCode &&
      isUseConversion == that.isUseConversion &&
      isSymbolicAchievements == that.isSymbolicAchievements &&
      achievementNumber == that.achievementNumber &&
      achievementName == that.achievementName &&
      achievementTypeName == that.achievementTypeName &&
      achievementDesc == that.achievementDesc &&
      achievementAddDesc == that.achievementAddDesc &&
      achievementConversiontDesc == that.achievementConversiontDesc &&
      awardedUnit == that.awardedUnit &&
      relatedDocument == that.relatedDocument &&
      awardedTime == that.awardedTime &&
      validEndTime == that.validEndTime &&
      subjectLifeCycle == that.subjectLifeCycle &&
      operationInductionId == that.operationInductionId &&
      createTime == that.createTime &&
      operateTime == that.operateTime &&
      achievementCategoryName == that.achievementCategoryName &&
      achievementGradeName == that.achievementGradeName &&
      belongName == that.belongName &&
      copyrightObjectName == that.copyrightObjectName &&
      achievementBusinessGradeId == that.achievementBusinessGradeId &&
      achievementBusinessGradeNumber == that.achievementBusinessGradeNumber &&
      achievementBusinessGradeName == that.achievementBusinessGradeName &&
      dutyDeptId == that.dutyDeptId &&
      copyrightObjectId == that.copyrightObjectId &&
      deptShortName == that.deptShortName &&
      achiveLibraryType == that.achiveLibraryType &&
      achivementStateCode == that.achivementStateCode
    );
  }

  @Override
  public int hashCode() {
    return Objects.hash(
      super.hashCode(),
      achievementId,
      achievementTypeId,
      achievementTypeNumber,
      achievementCategoryId,
      achievementCategoryNumber,
      achievementGradeId,
      achievementGradeNumber,
      copyrightObjectTypeCode,
      isUseConversion,
      isSymbolicAchievements,
      achievementNumber,
      achievementName,
      achievementTypeName,
      achievementDesc,
      achievementAddDesc,
      achievementConversiontDesc,
      awardedUnit,
      relatedDocument,
      awardedTime,
      validEndTime,
      subjectLifeCycle,
      operationInductionId,
      createTime,
      operateTime,
      achievementCategoryName,
      achievementGradeName,
      belongName,
      copyrightObjectName,
      achievementBusinessGradeId,
      achievementBusinessGradeNumber,
      achievementBusinessGradeName,
      dutyDeptId,
      copyrightObjectId,
      deptShortName,
      achiveLibraryType,
      achivementStateCode
    );
  }

}
